package templatemethod.general;

/**
 * @Author：LJ
 * @Description：
 * @Date: 2017/11/27
 * @Modified By:
 */
public abstract class AbstractClass {
    /**
     * 基本方法尽量设计成protected ,符合迪米特原则；尽量不要暴露不需要公开的属性或方法
     * 实现类若非必要,尽量不需要扩大父类的访问权限
     */
    protected abstract void doSomething();

    protected abstract void doSomething1();

    //模板方法
    public void templateMethod() {
        /*调用基本方法,完成相关逻辑*/
        if (isAlarm()) doSomething();
        doSomething1();
    }

    //钩子方法(基本方法) 子类可以覆写该方法,来控制模板方法中的业务逻辑
    protected boolean isAlarm() {
        return true;
    }
}
